﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using Demo.CommonBase.Logging;
using Demo.CommonBase.Exceptions;
using Demo.Services.Contracts.DTO.Infos;
using Demo.CommonBase.DTO.Infos;
using Demo.Services.Contracts.DTO.Filters;
using Demo.CommonBase.DTO.Filters;
using System.Xml.Serialization;
using System.Xml;

namespace Demo.Services.Integration.DAO.IntegrationComponents.Helpers
{
    public class ResourceDAOHelper
    {
        /// <summary>
        /// Obtiene parametros para obtener un recurso por id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetResourceByIdParams(int id)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@ResourceId", id);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }
        /// <summary>
        /// Obtiene parametros para  Actualizar un Recurso
        /// </summary>
        /// <param name="tecnology"></param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetResourceUpdateParams(ResourceInfo resource)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Id", resource.Id);
                result.Add(parameter);
                parameter = new SqlParameter("@Nombre", resource.Name);
                result.Add(parameter);
                parameter = new SqlParameter("@ApellidoPaterno", resource.LastName);
                result.Add(parameter);
                parameter = new SqlParameter("@ApellidoMaterno", resource.SecondLastName);
                result.Add(parameter);
                parameter = new SqlParameter("@FechaNacimiento", resource.BirthDate);
                result.Add(parameter);
                parameter = new SqlParameter("@TipoRecurso", resource.ResourceType);
                result.Add(parameter);
                parameter = new SqlParameter("@Telefono", resource.PhoneNumber);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;

        }

        /// <summary>
        /// Obtiene parametros para Guardar un Recurso 
        /// </summary>
        /// <param name="tecnology"></param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetResourceSaveParams(ResourceInfo resource)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Nombre", resource.Name);
                result.Add(parameter);
                parameter = new SqlParameter("@ApellidoPaterno", resource.LastName);                
                result.Add(parameter);
                parameter = new SqlParameter("@ApellidoMaterno", resource.SecondLastName);
                result.Add(parameter);
                parameter = new SqlParameter("@FechaNacimiento", resource.BirthDate);
                result.Add(parameter);
                parameter = new SqlParameter("@TipoRecurso", resource.ResourceType);
                result.Add(parameter);
                parameter = new SqlParameter("@Telefono", resource.PhoneNumber);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;

        }
        public static IList<IDbDataParameter> GetResourceByPage(PaginationInfo pagin, ResourceFilter filters)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Name", filters.Name);
                result.Add(parameter);
                parameter = new SqlParameter("@LastName", filters.LastName);
                result.Add(parameter);
                parameter = new SqlParameter("@SecondLastName", filters.SecondLastName);
                result.Add(parameter);
                parameter = new SqlParameter("@BirthDate", filters.BirthDate);
                result.Add(parameter);
                parameter = new SqlParameter("@Cost", filters.Cost);
                result.Add(parameter);
                parameter = new SqlParameter("@PhoneNumber", filters.PhoneNumber);
                result.Add(parameter);                
                parameter = new SqlParameter("@Start", pagin.PageNum);
                result.Add(parameter);
                parameter = new SqlParameter("@Limit", pagin.PageSize);                
                result.Add(parameter);
                parameter = new SqlParameter("@Order", pagin.Sort);
                result.Add(parameter);
                parameter = new SqlParameter("@Direction", pagin.Direction);                
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;

        }


        // <summary>
        /// Obtiene parametros para obtener un recurso por nombre 
        /// </summary>
        /// <param name="filter">filtros</param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetResourceByNameParams(ComboBoxFilter filter)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Start", filter.Pagination.PageNum);
                result.Add(parameter);

                parameter = new SqlParameter("@Limit", filter.Pagination.PageSize);
                result.Add(parameter);

                parameter = new SqlParameter("@Name", filter.Name);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        // <summary>
        /// Obtiene parametros para obtener un recurso por nombre 
        /// </summary>
        /// <param name="filter">filtros</param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetResourceSaveDetailParams(int id, string tecnologyList)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Id", id);
                result.Add(parameter);
                parameter = new SqlParameter("@TecnologyList", tecnologyList);
                result.Add(parameter);                
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        /// <summary>
        /// Obtiene parametros para obtener un recurso por id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static IList<IDbDataParameter> ValidationResourceParams(ResourceFilter filter)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Id", filter.Id);
                result.Add(parameter);
                parameter = new SqlParameter("@Name", filter.Name);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

    }
}
